package main
import (
	"fmt"
)

func func1(n int){
	if n==0{
		return
	}
	n--
	func1(n)
	fmt.Println(n)
}
func func2(n int)int{
	if n==1{
		return 1
	}
	return n+func2(n-1)
}

func func3(n int)int{
	if n==1{
		return 1
	}
	return n*func3(n-1)
}


//全局函数，常驻内存 污染全局
//局部变量，不常驻内存 不污染全局
//闭包  常驻内存  但不污染全局
//闭包的写法:函数中嵌套函数  返回嵌套的函数

func adder1()func ()int{
	var i int=10
	return func ()int{return i+1}
}

func adder2()func(int)int{
	i:=10
	return func(y int)int{
		i+=y
		return i
	}
}


func adder3()func ()int{
	i:=10
	return func ()int{
		i++
		return i
	}
}
func main(){
	var sum int =0
	for i:=1;i<=100;i++{
		sum+=i
	}
	fmt.Println(sum)
	func1(10)

	//递归求1-100
	ret:=func2(100)
	fmt.Println(ret)

	ret=func3(10)
	fmt.Println(ret)

	fc:=adder1()
	fmt.Println(fc())
	fmt.Println(fc())

	fc2:=adder2()
	fmt.Println(fc2(10))
	fmt.Println(fc2(10))

	fc3:=adder3()
	fmt.Println(fc3())
	fmt.Println(fc3())
}